Node.js ES Modules

Node.js-এ আধুনিক জাভাস্ক্রিপ্ট মডিউল স্ট্যান্ডার্ড আবিষ্কার করুন

ES মডিউলগুলির পরিচিতি

ES মডিউল (ESM) হল পুনঃব্যবহারের জন্য জাভাস্ক্রিপ্ট কোড প্যাকেজ করার জন্য অফিসিয়াল স্ট্যান্ডার্ড ফর্ম্যাট।

এটি ES6 (ES2015) এ চালু করা হয়েছিল এবং এখন Node.js-এ সমর্থিত।

ES মডিউলের আগে, Node.js একচেটিয়াভাবে CommonJS মডিউল ফর্ম্যাট ব্যবহার করত (প্রয়োজন/রপ্তানি)।

এখন ডেভেলপাররা তাদের প্রজেক্টের চাহিদার উপর ভিত্তি করে CommonJS এবং ES মডিউলের মধ্যে বেছে নিতে পারেন।

স্ট্রাকচার্ড সিনট্যাক্স

CommonJS এর ​​তুলনায় উন্নত আর্কিটেকচার

স্ট্যাটিক বিশ্লেষণ

স্ট্যান্ডার্ড বিশ্লেষণযোগ্য ব্লক

গাছ কাঁপানো

ছোট কাঠামোর জন্য কাঠ-কাঁপানো সমর্থন

কমনজেএস বনাম ইএস মডিউল

CommonJS এবং ES মডিউলগুলি কীভাবে আলাদা তা এখানে:

বৈশিষ্ট্য CommonJS ES মডিউল
ফাইল এক্সটেনশন .js (ডিফল্ট) .mjs (বা সঠিক কনফিগারেশন সহ .js)
সিনট্যাক্স আমদানি করুন require() import
সিনট্যাক্স রপ্তানি করুন module.exports / exports export / export default
আমদানি সময় গতিশীল (চালানোর সময়) স্ট্যাটিক (অপারেশনের আগে পার্স করা)
উচ্চ-স্তরের অপেক্ষা সমর্থিত নয় সমর্থিত হয়
আমদানিতে ফাইল URL প্রয়োজন নেই স্থানীয় ফাইলের জন্য প্রয়োজন

উদাহরণ: CommonJS মডিউল

// math.js (CommonJS)
function add(a, b) {
  return a + b;
}

function subtract(a, b) {
  return a - b;
}

module.exports = {
  add,
  subtract
};

// app.js (CommonJS)
const math = require('./math');
console.log(math.add(5, 3)); // 8

উদাহরণ: ES মডিউল

// math.mjs (ES Module)
export function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

// app.mjs (ES Module)
import { add, subtract } from './math.mjs';
console.log(add(5, 3)); // 8

ES মডিউল চলমান

Node.js ES :

.mjs ফাইল এক্সটেনশন ব্যবহার করে

সবচেয়ে সহজ উপায় হল আপনার ফাইলের জন্য .mjs এক্সটেনশন ব্যবহার করা।

Node.js ES .

2. package.json-এ "type": "মডিউল" সেট করা

নিয়মিত .js ফাইলের সাথে ES মডিউল ব্যবহার করতে, আপনার package.json-এ নিম্নলিখিত যোগ করুন:

{
  "name": "my-package",
  "version": "1.0.0",
  "type": "module"
}

3. --input-type=module পতাকা ব্যবহার করা

নোড কমান্ডের সাথে সরাসরি চালানো স্ক্রিপ্টগুলির জন্য, আপনি মডিউল সেটিং নির্দিষ্ট করতে পারেন:

node --input-type=module script.js

💡দ্রষ্টব্য:

আপনি যদি এমন একটি কোডবেস নিয়ে কাজ করেন যা প্রাথমিকভাবে CommonJS ব্যবহার করে এবং একটি একক ফাইলে ES মডিউল ব্যবহার করতে চান, তাহলে .mjs এক্সটেনশন ব্যবহার করা আরও স্বচ্ছ এবং কম ত্রুটি-প্রবণ পদ্ধতি।

সিনট্যাক্স আমদানি এবং রপ্তানি

ES মডিউলগুলি CommonJS-এর তুলনায় কোড আমদানি ও রপ্তানি করার আরও নমনীয় উপায় প্রদান করে।

সিনট্যাক্স রপ্তানি করুন

নাম রপ্তানি
// Multiple named exports
export function sayHello() {
  console.log('Hello');
}

export function sayGoodbye() {
  console.log('Goodbye');
}

// Alternative: export list at the end
function add(a, b) {
  return a + b;
}

function subtract(a, b) {
  return a - b;
}

export { add, subtract };
ডিফল্ট রপ্তানি
// Only one default export per module
export default function() {
  console.log('I am the default export');
}

// Or with a named function/class/object
function mainFunction() {
  return 'Main functionality';
}

export default mainFunction;

সিনট্যাক্স আমদানি করুন

রপ্তানি নামে আমদানি করা
// Import specific named exports
import { sayHello, sayGoodbye } from './greetings.mjs';
sayHello(); // Hello

// Rename imports to avoid naming conflicts
import { add as sum, subtract as minus } from './math.mjs';
console.log(sum(5, 3)); // 8

// Import all named exports as an object
import * as math from './math.mjs';
console.log(math.add(7, 4)); // 11
ডিফল্ট আমদানি এবং নাম রপ্তানি
// Import both default and named exports
import main, { VERSION } from './main.mjs';
console.log(VERSION); // 1.0.0
main(); // Main function

গতিশীল আমদানি

ES মডিউলগুলি গতিশীল আমদানি সমর্থন করে, যা আপনাকে শর্তসাপেক্ষে বা চাহিদা অনুযায়ী মডিউল লোড করতে দেয়।

উদাহরণ: গতিশীল আমদানি

// app.mjs
async function loadModule(moduleName) {
  try {
    // Dynamic import returns a promise
    const module = await import(`./${moduleName}.mjs`);
    return module;
  } catch (error) {
    console.error(`Failed to load ${moduleName}:`, error);
  }
}

// Load a module based on a condition
const moduleName = process.env.NODE_ENV === 'production' ? 'prod' : 'dev';

loadModule(moduleName).then(module => {
  module.default(); // Call the default export
});

// Or with simpler await syntax
(async () => {
  const mathModule = await import('./math.mjs');
  console.log(mathModule.add(10, 5)); // 15
})();

🚀কেস ব্যবহার করুন:

গতিশীল আমদানি কোড-বিভাজন, অলস-লোডিং মডিউল, বা রানটাইম অবস্থার উপর ভিত্তি করে শর্তসাপেক্ষে মডিউল লোড করার জন্য দুর্দান্ত।

উচ্চ-স্তরের অপেক্ষা

CommonJS এর ​​বিপরীতে, ES মডিউলগুলি টপ-লেভেল ওয়েট সমর্থন করে, যা আপনাকে মডিউল লেভেলে অ্যাসিঙ্ক ফাংশনের বাইরে ওয়েট ব্যবহার করতে দেয়।

উদাহরণ: শীর্ষ-স্তরের অপেক্ষা

// data-loader.mjs
// This would cause an error in CommonJS or in a script
// But works at the top level in an ES Module

console.log('Loading data...');

// Top-level await - the module's execution pauses here
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
const data = await response.json();

console.log('Data loaded!');

export { data };

// When another module imports this one, it will only get the exports
// after all the top-level await operations have completed

কনফিগারেশন লোড হচ্ছে

ফাইল বা দূরবর্তী উত্স থেকে কনফিগারেশন লোড হচ্ছে৷

ডাটাবেস সংযোগ

কার্যকারিতা রপ্তানি করার আগে ডাটাবেসের সাথে সংযোগ করা হচ্ছে

ব্যাচ আরম্ভ

শর্তাধীন আমদানি বা ব্যাচ প্রারম্ভিকতা

সর্বোত্তম অনুশীলন

Node.js ES , :

1. ফাইল এক্সটেনশন সম্পর্কে পরিষ্কার থাকুন

স্থানীয় ফাইলগুলির জন্য আপনার আমদানি বিবৃতিতে সর্বদা ফাইল এক্সটেনশানগুলি অন্তর্ভুক্ত করুন:

// Good
import { someFunction } from './utils.mjs';

// Bad - might not work depending on configuration
import { someFunction } from './utils';

2. ফোল্ডার চিহ্ন সঠিকভাবে ব্যবহার করুন

ফোল্ডার আমদানির জন্য, index.mjs ফাইল তৈরি করুন:

// utils/index.mjs
export * from './string-utils.mjs';
export * from './number-utils.mjs';

// app.mjs
import { formatString, add } from './utils/index.mjs';

3. সঠিক এক্সপোর্ট শৈলী নির্বাচন করুন

একাধিক ফাংশন/মানগুলির জন্য নামযুক্ত রপ্তানি ব্যবহার করুন এবং প্রধান ফাংশনের জন্য ডিফল্ট রপ্তানি ব্যবহার করুন:

// For libraries with many utilities, use named exports
export function validate() { /* ... */ }
export function format() { /* ... */ }

// For components or classes that are the primary export
export default class UserService { /* ... */ }

💎 Node.js :

ES মডিউল সম্পূর্ণরূপে Node.js v12-এ সমর্থিত, v14+ এ আরও ভাল সমর্থন সহ। পুরানো সংস্করণগুলির জন্য, আপনার ব্যাবেলের মতো একজন দোভাষীর প্রয়োজন হতে পারে।

সারাংশ

.mjs এক্সটেনশন

ES মডিউল চালানোর সহজ উপায়

সিনট্যাক্স আমদানি করুন

স্ট্যাটিক বিশ্লেষণ এবং গাছ-কাঁপানো

গতিশীল আমদানি

শর্তাধীন ব্লক লোড হচ্ছে

উচ্চ স্তরের অপেক্ষা

ব্যাচ মোডে সরাসরি অপেক্ষা সমর্থন

🚀মূল পয়েন্ট:

  • ES মডিউল হল আধুনিক জাভাস্ক্রিপ্ট মডিউল স্ট্যান্ডার্ড
  • CommonJS এর ​​তুলনায় স্থায়ী পার্সিং এবং ট্রি-কাঁপানো সমর্থন
  • ডায়নামিক আমদানি কোড-বিভাজনের জন্য দুর্দান্ত
  • শীর্ষ-স্তরের অপেক্ষা মডিউল শুরুকে সহজ করে
  • ফাইল এক্সটেনশন এবং রপ্তানি শৈলী সম্পর্কে পরিষ্কার থাকুন

অনুশীলন করুন

সঠিক কীওয়ার্ড নির্বাচন করুন।

ES মডিউল অন্যান্য মডিউল লোড______কীওয়ার্ড ব্যবহার করে।

require
✗ ভুল! প্রয়োজন কমনজেএস মডিউলের জন্য ব্যবহৃত হয়, ইএস মডিউল নয়
import
✓ ঠিক আছে! ES মডিউল অন্যান্য মডিউল আমদানি করতে আমদানি কীওয়ার্ড ব্যবহার করে
include
✗ ভুল! অন্তর্ভুক্ত জাভাস্ক্রিপ্টে মডিউল আমদানি করতে ব্যবহৃত একটি কীওয়ার্ড নয়
load
✗ ভুল! লোড জাভাস্ক্রিপ্টে মডিউল আমদানি করতে ব্যবহৃত একটি কীওয়ার্ড নয়